package com.iakuil.app.common.core.domain;

import com.fasterxml.jackson.annotation.JsonAnyGetter;

import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 动态字段
 *
 * <p>注意：动态字段值尽量不要有嵌套。
 *
 * @author Kai
 */
public abstract class DynamicFields implements Serializable {

    public DynamicFields() {
    }

    /**
     * 动态属性
     */
    protected Map<String, Object> props;

    /**
     * 序列化JSON/XML时，props属性内字段会被扁平化，与code、msg等处于同一层级。
     */
    @JsonAnyGetter
    public Map<String, Object> getProps() {
        return this.props;
    }

    /**
     * Adding Properties to an Instance.
     */
    public DynamicFields put(String key, Object value) {
        if (this.props == null) {
            this.props = new LinkedHashMap<>();
        }
        this.props.put(key, value);
        return this;
    }

    /**
     * Dynamic Timestamp.
     */
    public Long getTs() {
        return System.currentTimeMillis();
    }
}
